# _*_ coding: UTF-8 _*_
# @Time     : 2021/10/29 14:34
# @Author   : yangshuaishuai
# @Site     : http://www.hzdledu.cn/
# @File     : w1s2_元素的查找和定位.py
# @Software : PyCharm
from selenium import webdriver
import time
from selenium.webdriver.common.by import By


# 元素的查找

def foo0():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    # 1.通过name属性定位：比较推荐
    def foo2():
        driver = webdriver.Chrome()
        driver.maximize_window()

        driver.get('https://www.baidu.com/')
        element = driver.find_element_by_name('wd')

    # 找单个元素
    # 2.通过ID属性定位：最推荐的定位方式，ID一般是唯一的，最快的定位方式，但是不是所有元素都有ID属性
    element = driver.find_element_by_id('kw')  # 通过ID定位搜索输入框
    # element=driver.find_element(By.ID,'kw')
    element.send_keys('双11买什么')  # 模拟键盘输入
    time.sleep(2)

    driver.quit()


# 元素的定位


# 3.通过link text定位：只针对<a>,通过链接的文本定位
def foo3():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_link_text('新闻').click()  # 模拟鼠标左键单击
    time.sleep(2)
    driver.quit()


# 4.通过partial link text定位：只针对<a>,通过链接的部分文本定位
def foo4():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_partial_link_text('ha').click()
    time.sleep(2)
    driver.quit()


# 5.通过class_name定位：通过class属性值定位，返回值是list
def foo5():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    elements = driver.find_elements_by_class_name("mnav")  # 获取所有class属性为mnav的元素是列表
    for element in elements:
        print(element.text)  # 获取元素text
    time.sleep(2)
    driver.quit()


# 6.通过tag name定位：通过标签名定位，一般用于定位多个元素
def foo6():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    elements = driver.find_elements_by_tag_name('a')
    for element in elements:
        print(element.text)  # 获取元素text
    time.sleep(2)
    driver.quit()


# 7.通过css selector定位：通过css选择器定位
def foo7():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_css_selector('#s-top-left > a:nth-child(3)').click()
    time.sleep(5)

    driver.quit()


# 8.通过xpath定位：最强大的定位的方式，也是最慢的
def foo8():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_xpath('//*[@id="s-top-left"]/a[4]').click()
    time.sleep(5)

    driver.quit()


if __name__ == '__main__':
    # foo1()
    # foo2()
    # foo3()
    # foo4()
    # foo5()
    # foo6()
    # foo7()
    foo8()
